iT邦幫忙

2024 iThome 鐵人賽

DAY 10
1
Mobile Development

用最接近自然語言的Basic30天學會行動App系列 第 10

Basic30天學會行動App-第10章.App資料存取與儲存

  • 分享至 

  • xImage
  •  

第10章: 資料存取與儲存

在行動應用程式開發中,資料的存取與儲存是核心功能之一。無論是應用程式設定、用戶資料,還是更為複雜的數據庫操作,如何有效地管理和存儲這些資料直接影響應用程式的性能和用戶體驗。本章將探討如何在 B4A 中使用 SharedPreferences、讀寫本地檔案,並進行簡單的 SQLite 資料庫操作。

SharedPreferences的使用

SharedPreferences 是 Android 提供的一種輕量級資料存儲方式,主要用於保存少量的設定或狀態資訊,例如用戶偏好設定、應用程式的最後狀態等。這種資料存儲方式適合存儲簡單的鍵值對。

  1. 基本操作
    要使用 SharedPreferences,首先需要初始化一個 SharedPreferences 物件,然後通過 PutString、PutInt 等方法來保存資料。
Sub SavePreferences
    Dim prefs As SharedPreferences
    prefs.Initialize("UserSettings")
    
    prefs.PutString("username", "JohnDoe")
    prefs.PutInt("age", 30)
    prefs.PutBoolean("isLoggedIn", True)
    prefs.Save
End Sub

在這個範例中,我們將用戶名、年齡和登入狀態存儲到 SharedPreferences 中。Save 方法用來將這些更改持久化到存儲中。
2. 讀取資料
要讀取 SharedPreferences 中保存的資料,可以使用 GetString、GetInt 等方法。

Sub LoadPreferences
    Dim prefs As SharedPreferences
    prefs.Initialize("UserSettings")
    
    Dim username As String = prefs.GetString("username", "DefaultUser")
    Dim age As Int = prefs.GetInt("age", 0)
    Dim isLoggedIn As Boolean = prefs.GetBoolean("isLoggedIn", False)
    
    Log("Username: " & username)
    Log("Age: " & age)
    Log("Is Logged In: " & isLoggedIn)
End Sub

這個範例從 SharedPreferences 中讀取之前保存的用戶資料,如果資料不存在,則返回預設值。

讀寫本地檔案

在某些情況下,應用程式可能需要存取更大且結構更複雜的資料,這時可以使用本地檔案進行資料存取。B4A 提供了簡單的檔案操作方法來讀寫本地檔案。

  1. 寫入檔案
    你可以使用 File 物件來寫入文本資料到本地檔案中。File.WriteString 是一個常用的方法,用來將字串寫入到檔案。
Sub WriteToFile
    Dim fileName As String = "user_data.txt"
    Dim dir As String = File.DirInternal
    
    Dim data As String = "Name: John Doe" & CRLF & "Age: 30" & CRLF & "IsLoggedIn: True"
    File.WriteString(dir, fileName, data)
    
    Log("Data written to file: " & fileName)
End Sub

在這個範例中,我們將一段文字資料寫入到應用程式內部存儲中的 user_data.txt 檔案中。File.DirInternal 是應用程式的內部存儲目錄,這些檔案對其他應用程式不可見。
2. 讀取檔案
讀取本地檔案的過程與寫入檔案相似,可以使用 File.ReadString 方法來讀取文字檔案的內容。

Sub ReadFromFile
    Dim fileName As String = "user_data.txt"
    Dim dir As String = File.DirInternal
    
    If File.Exists(dir, fileName) Then
        Dim data As String = File.ReadString(dir, fileName)
        Log("Data read from file: " & data)
    Else
        Log("File does not exist: " & fileName)
    End If
End Sub

這個範例展示了如何讀取之前寫入的檔案資料,並將內容記錄在日誌中。如果檔案不存在,系統會提示相應的訊息。
3. 處理二進制檔案
除了文本檔案,B4A 也支援二進制檔案的讀寫操作,這對於存儲圖片、音頻等非文本資料非常有用。

Sub WriteBinaryFile
    Dim fileName As String = "image.png"
    Dim dir As String = File.DirInternal
    
    Dim data() As Byte ' 假設這是二進制數據
    File.WriteBytes(dir, fileName, data)
    
    Log("Binary data written to file: " & fileName)
End Sub

Sub ReadBinaryFile
    Dim fileName As String = "image.png"
    Dim dir As String = File.DirInternal
    
    If File.Exists(dir, fileName) Then
        Dim data() As Byte = File.ReadBytes(dir, fileName)
        Log("Binary data read from file: " & fileName)
    Else
        Log("File does not exist: " & fileName)
    End If
End Sub

在這個範例中,我們演示了如何寫入和讀取二進制檔案,這對於需要處理多媒體資料的應用程式特別有用。

簡單的SQLite資料庫操作

當需要處理結構化且大量的資料時,SQLite 是一個輕量級且高效的嵌入式資料庫解決方案。在 B4A 中,SQLite 操作相對簡單且易於上手。

  1. 建立資料庫與資料表
    在使用 SQLite 之前,你需要先建立資料庫和資料表。
Sub CreateDatabase
    Dim sql As SQL
    sql.Initialize(File.DirInternal, "user_data.db", True)
    
    Dim createTable As String
    createTable = "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, username TEXT, age INTEGER)"
    sql.ExecNonQuery(createTable)
    
    Log("Database and table created.")
End Sub

這段程式碼會在應用程式內部存儲中建立一個名為 user_data.db 的 SQLite 資料庫,並在其中創建一個 users 資料表。
2. 插入資料
創建資料表後,你可以插入資料到資料庫中。

Sub InsertData
    Dim sql As SQL
    sql.Initialize(File.DirInternal, "user_data.db", True)
    
    Dim username As String = "JohnDoe"
    Dim age As Int = 30
    
    Dim insertQuery As String
    insertQuery = "INSERT INTO users (username, age) VALUES (?, ?)"
    sql.ExecNonQuery2(insertQuery, Array As Object(username, age))
    
    Log("Data inserted.")
End Sub

這段程式碼演示了如何使用 SQL 插入語句將資料插入到 users 資料表中。
3. 查詢資料
要從資料庫中檢索資料,可以使用 SQL 查詢語句。

Sub QueryData
    Dim sql As SQL
    sql.Initialize(File.DirInternal, "user_data.db", True)
    
    Dim query As String
    query = "SELECT * FROM users"
    
    Dim cursor As Cursor
    cursor = sql.ExecQuery(query)
    
    For i = 0 To cursor.RowCount - 1
        cursor.Position = i
        Dim id As Int = cursor.GetInt("id")
        Dim username As String = cursor.GetString("username")
        Dim age As Int = cursor.GetInt("age")
        
        Log("ID: " & id & ", Username: " & username & ", Age: " & age)
    Next
    
    cursor.Close
End Sub

在這個範例中,我們查詢 users 資料表中的所有記錄,並將結果輸出到日誌中。
4. 更新與刪除資料
除了插入和查詢,你還可以更新和刪除資料。

Sub UpdateData
    Dim sql As SQL
    sql.Initialize(File.DirInternal, "user_data.db", True)
    
    Dim updateQuery As String
    updateQuery = "UPDATE users SET age = ? WHERE username = ?"
    sql.ExecNonQuery2(updateQuery, Array As Object(35, "JohnDoe"))
    
    Log("Data updated.")
End Sub

Sub DeleteData
    Dim sql As SQL
    sql.Initialize(File.DirInternal, "user_data.db", True)
    
    Dim deleteQuery As String
    deleteQuery = "DELETE FROM users WHERE username = ?"
    sql.ExecNonQuery2(deleteQuery, Array As Object("JohnDoe"))
    
    Log("Data deleted.")
End Sub

這些範例展示了如何使用 SQL 語句更新和刪除資料,這在資料維護和管理中非常常見。

範例程式:整合資料存取與儲存操作

以下是一個綜合範例,展示了如何將 SharedPreferences、本地檔案和 SQLite 資料庫操作整合到一個簡單的應用程式中。

Sub Process_Globals
    ' 全域變數
End Sub

Sub Globals
    Dim btnSavePrefs As Button
    Dim btnLoadPrefs As Button
    Dim btnWriteFile As Button
    Dim btnReadFile As Button
    Dim btnInsertDB As Button
    Dim btnQueryDB As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("MainLayout")
    
    btnSavePrefs.Text = "保存偏好設定"
    btnLoadPrefs.Text = "載入偏好設定"
    btnWriteFile.Text = "寫入檔案"
    btnReadFile.Text = "讀取檔案"
    btnInsertDB.Text = "插入資料庫"
    btnQueryDB.Text = "查詢資料庫"
    
    CreateDatabase
End Sub

Sub btnSavePrefs_Click
    SavePreferences
End Sub

Sub btnLoadPrefs_Click
    LoadPreferences
End Sub

Sub btnWriteFile_Click
    WriteToFile
End Sub

Sub btnReadFile_Click
    ReadFromFile
End Sub

Sub btnInsertDB_Click
    InsertData
End Sub

Sub btnQueryDB_Click
    QueryData
End Sub

這個範例將各種資料存取和儲存操作整合到一個簡單的介面中,使得應用程式能夠保存和檢索用戶設定、處理本地檔案,以及管理 SQLite 資料庫中的數據。通過這些技術,開發者可以有效地處理應用程式中的資料,從而提升應用程式的功能性和用戶體驗。

參考網址
• B4X SQLite Database https://www.b4x.com/guides/B4XSQLiteDatabase.html


上一篇
Basic30天學會行動App-第9章.App使用Intent與Activity
下一篇
Basic30天學會行動App-第11章.實作To-Do List App
系列文
用最接近自然語言的Basic30天學會行動App30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言